// utils/captcha.js
const svgCaptcha = require('svg-captcha');
const path = require('path');

// 创建验证码的函数
export function createCaptcha() {
    const options = {
        // size: 4, // 验证码长度
        // noise: 3, // 干扰线条数
        // color: true,
        // // background:   '#f0f0f0',
        // width: 120,
        // maxheight: 46,
        // height:46,
        // fontSize: 30,
        // fontPath: path.join(__dirname, '../fonts/OpenSans.ttf'), // 更新为新字体的路径
    };

    return svgCaptcha.create(options);
}


// 模拟存储验证码的内存对象，生产环境中可以替换成 Redis 或数据库
let captchaStore = {};

// 生成验证码
function generateCaptcha(sessionId) {
    // 生成验证码
    const captcha = svgCaptcha.create({
        size: 4, // 验证码长度
        ignoreChars: '0o1i', // 排除字符，防止混淆
        noise: 1, // 扰乱度  线条
        color: true, // 是否使用颜色
        // background: '#f0f0f0', // 背景颜色  不支持RGB 等原生样式
        width: 118,
        maxheight: 46,
        height:46,
        fontSize: 36,
        border: true,
        padding: 2,
        fontPath: path.join(__dirname, '../fonts/OpenSans.ttf'), // 更新为新字体的路径
    });

    const captchaText = captcha.text;

    // 存储验证码文本，使用 sessionId 作为键值
    captchaStore[sessionId] = {
        text: captchaText,
        image: captcha.data,
        timestamp: Date.now(), // 存储生成时间戳
    };

    // 返回验证码图像和验证码文本
    return {
        image: captcha.data, // 验证码图片
        text: captchaText, // 验证码文本（用于后端验证）
    };
}

// 验证验证码
function verifyCaptcha(sessionId, captchaInput) {
    return new Promise((resolve, reject) => {
        const storedCaptcha = captchaStore[sessionId];

        if (!storedCaptcha) {
            return reject('验证码已过期或无效');
        }

        // 验证码过期时间（比如设置为 5 分钟）
        const captchaExpireTime = 5 * 60 * 1000;

        // 检查验证码是否超时
        if (Date.now() - storedCaptcha.timestamp > captchaExpireTime) {
            delete captchaStore[sessionId]; // 超时后删除该验证码
            return reject('验证码已过期');
        }

        // 比对验证码，忽略大小写
        if (captchaInput.toLowerCase() === storedCaptcha.text.toLowerCase()) {
            return resolve('验证码验证成功');
        } else {
            return reject('验证码错误');
        }
    });
}

// 导出接口
export { generateCaptcha, verifyCaptcha };
